package park.model.party;

import java.io.Serializable;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.builder.ToStringStyle;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.EqualsBuilder;
/**
 * @archetype party-place-thing
 * @author gilberto
 * @since 08/04/2009
 */
public abstract class Pessoa implements Serializable {
	private static final long serialVersionUID = 1L;
	private Integer cdPessoa;
	private String nome;
	/**
	 * Tipos:
	 * 	- Física (F): é a pessoa natural, isto é, todo indivíduo (homem ou mulher), desde o nascimento até a morte. 
	 * 	- Jurídica (J): é a entidade abstrata com existência e responsabilidade jurídicas como, por exemplo, uma associação,
	 * empresa, companhia, legalmente autorizadas. Podem ser de direito público (União, Unidades Federativas, Autarquias etc.),
	 * ou de direito privado (empresas, sociedades simples, associações etc.). 
	 */
	private String tipo;
	private String endereco;
	
	public Pessoa(){};
	public Pessoa(Integer cdPessoa, String nome, String tipo, String endereco) {
		super();
		this.cdPessoa = cdPessoa;
		this.nome = nome;
		this.tipo = tipo;
		this.endereco = endereco;
	}
	public Integer getCdPessoa() {return cdPessoa;}
	public void setCdPessoa(Integer cdPessoa) {this.cdPessoa = cdPessoa;	}
	public String getNome() {return nome;}
	public void setNome(String nome) {this.nome = nome;	}
	public String getTipo() {return tipo;}
	public void setTipo(String tipo) {this.tipo = tipo;}
	public String getEndereco() {return endereco;}
	public void setEndereco(String endereco) {this.endereco = endereco;	}
	
	
	public boolean equals(final Object other) {
		if (this == other)
			return true;
		if (!(other instanceof Pessoa))
			return false;
		Pessoa castOther = (Pessoa) other;
		return new EqualsBuilder()
					.append(cdPessoa, castOther.cdPessoa)
					.append(nome, castOther.nome)
					.append(tipo, castOther.tipo)
					.append(endereco, castOther.endereco).isEquals();
	}
	public int hashCode() {
		return new HashCodeBuilder()
					.append(cdPessoa)
					.append(nome)
					.append(tipo)
					.append(endereco).toHashCode();
	}
	public String toString() {
		return new ToStringBuilder(this, ToStringStyle.MULTI_LINE_STYLE)
				.appendSuper(super.toString())
				.append("cdPessoa", cdPessoa)
				.append("nome", nome)
				.append("tipo", tipo)
				.append("endereco", endereco).toString();
	}

	
}
